/**
 * This file is part of 1genia trampoline
 * Copyright (C) 2007 1genia (contact@1genia.com)
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; version 3 of the License. 
 *
 * This library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details. 
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; see the file COPYING.TXT.  If not,
 * write to the Free Software Foundation, Inc., 51 Franklin Street,
 * Fifth Floor, Boston, MA 02110-1301, USA. 
 **/
package com.genia.toolbox.uml_generator.model;

import com.genia.toolbox.uml_generator.model.impl.AssociationEnd;

/**
 * interface that represents an association between two models.
 */
public interface AssociationModel
    extends AbstractObject
{

  /**
   * returns the cardinality of the other object. This means that if this method
   * returns ONE, the association is ? TO ONE.
   * 
   * @return the cardinality of the other object
   */
  public abstract AssociationCardinality getOtherCardinality();



  /**
   * returns the type of the object associated object.
   * 
   * @return the {@link AbstractClassModel} begin the model of the associated
   *         object
   */
  public abstract AbstractClassModel getAssociatedType();



  /**
   * returns the type of the object from where the association start.
   * 
   * @return the {@link AbstractClassModel} begin the model of the associated
   *         object
   */
  public abstract AbstractClassModel getCurrentType();



  /**
   * returns the cardinality of this object. This means that if this method
   * returns ONE, the association is ONE TO ?.
   * 
   * @return the cardinality
   */
  public abstract AssociationCardinality getCurrentCardinality();



  /**
   * returns the {@link AssociationModel} representing the other end of the
   * association.
   * 
   * @return the {@link AssociationModel} representing the other end of the
   *         association
   */
  public abstract AssociationModel getOtherEndAssociation();



  /**
   * returns the {@link AttributeModel} representing the qualifier for this
   * association, or <code>null</code> if this association has no qualifier.
   * 
   * @return the {@link AttributeModel} representing the qualifier for this
   *         association, or <code>null</code> if this association has no
   *         qualifier
   */
  public abstract AttributeModel getQualifier();



  /**
   * returns the type of this association.
   * 
   * @return the type of this association
   */
  public abstract AssociationType getAssociationType();



  /**
   * returns the type of the other end of this association.
   * 
   * @return the type of the other end of this association
   */
  public abstract AssociationType getOtherAssociationType();



  /**
   * getter for the currentEnd property.
   * 
   * @return the currentEnd
   */
  public abstract AssociationEnd getCurrentEnd();



  /**
   * setter for the currentEnd property.
   * 
   * @param currentEnd
   *          the currentEnd to set
   */
  public abstract void setCurrentEnd(AssociationEnd currentEnd);



  /**
   * getter for the otherEnd property.
   * 
   * @return the otherEnd
   */
  public abstract AssociationEnd getOtherEnd();



  /**
   * setter for the otherEnd property.
   * 
   * @param otherEnd
   *          the otherEnd to set
   */
  public abstract void setOtherEnd(AssociationEnd otherEnd);



  /**
   * setter for the otherEndAssociation property.
   * 
   * @param otherEndAssociation
   *          the otherEndAssociation to set
   */
  public abstract void setOtherEndAssociation(AssociationModel otherEndAssociation);
}
